<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>预编译</title>
</head>
<body>

</body>
<script>
    // 1. 创建AO对象 Activation Object (执行期上下文)
    // 2. 找行参和变量声明, 将变量和行参名作为AO属性名, 值为undefined
    // 3. 将实参指和行参统一
    // 4. 在函数体里面找函数声明,值赋予函数体
    //
    function fn(a) {
        console.log(a);

        var a = 123;
        console.log(a);

        function a() {}

        console.log(a);

        var b = function() {}

        console.log(b);

        function d() {}
    }
    fn(1);
    // 预编译发生在函数执行的前一刻
    //
    // AO{
    //  a : functiona () {}
    //  b : undefined
    //  d : function() {}
    // }
</script>
</html>
